package com.cyzy.homework.service;

import com.cyzy.homework.dto.LeaveRequestDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 请假申请服务接口
 */
public interface LeaveRequestService {
    
    /**
     * 提交请假申请
     */
    LeaveRequestDTO submitLeaveRequest(LeaveRequestDTO leaveRequestDTO);
    
    /**
     * 根据ID查询请假申请
     */
    LeaveRequestDTO getLeaveRequestById(Long id);
    
    /**
     * 根据用户ID查询请假申请列表
     */
    Page<LeaveRequestDTO> getLeaveRequestsByUserId(String userId, Pageable pageable);
    
    /**
     * 根据班级ID查询请假申请列表
     */
    Page<LeaveRequestDTO> getLeaveRequestsByClassId(String classId, Pageable pageable);
    
    /**
     * 根据状态查询请假申请列表
     */
    Page<LeaveRequestDTO> getLeaveRequestsByStatus(Integer status, Pageable pageable);
    
    /**
     * 根据班级ID和状态查询请假申请列表
     */
    Page<LeaveRequestDTO> getLeaveRequestsByClassIdAndStatus(String classId, Integer status, Pageable pageable);
    
    /**
     * 根据用户ID和状态查询请假申请列表
     */
    Page<LeaveRequestDTO> getLeaveRequestsByUserIdAndStatus(String userId, Integer status, Pageable pageable);
    
    /**
     * 更新请假申请
     */
    LeaveRequestDTO updateLeaveRequest(Long id, LeaveRequestDTO leaveRequestDTO);
    
    /**
     * 删除请假申请
     */
    void deleteLeaveRequest(Long id, String userId);
    
    /**
     * 获取用户请假统计信息
     */
    Object getUserLeaveStatistics(String userId);
    
    /**
     * 获取班级请假统计信息
     */
    Object getClassLeaveStatistics(String classId);
    
    /**
     * 检查日期冲突
     */
    boolean hasDateConflict(String userId, String startDate, String endDate, Long excludeId);
}


